dir 1: read 0:write
inst_type 0:integer 1:floating point
*/
-extern IA64_BUNDLE __vmx_get_domain_bundle(u64 iip);
#define SL_INTEGER 0 // store/load interger
#define SL_FLOATING 1 // store/load floating
{
struct vcpu *v = current;
IA64_BUNDLE bundle;
- IA64_BUNDLE __get_domain_bundle(UINT64);
unsigned long fault_ip;
fpswa_ret_t ret;
*/
if (!fp_fault && (ia64_psr(regs)->ri == 0))
fault_ip -= 16;
- bundle = __get_domain_bundle(fault_ip);
+
+ if (VMX_DOMAIN(current))
+ bundle = __vmx_get_domain_bundle(fault_ip);
+ else
+ bundle = __get_domain_bundle(fault_ip);
+
if (!bundle.i64[0] && !bundle.i64[1]) {
printk("%s: floating-point bundle at 0x%lx not mapped\n",
__FUNCTION__, fault_ip);
priv_handle_op(VCPU *vcpu, REGS *regs, int privlvl)
{
IA64_BUNDLE bundle;
- IA64_BUNDLE __get_domain_bundle(UINT64);
int slot;
IA64_SLOT_TYPE slot_type;
INST64 inst;
extern void setfpreg (unsigned long regnum, struct ia64_fpreg *fpval, struct pt_regs *regs);
extern void panic_domain(struct pt_regs *, const char *, ...);
-extern IA64_BUNDLE __get_domain_bundle(UINT64);
typedef union {
struct ia64_psr ia64_psr;
INST64_M47 M47; // purge translation entry
} INST64;
+extern IA64_BUNDLE __vmx_get_domain_bundle(unsigned long iip);
+extern IA64_BUNDLE __get_domain_bundle(unsigned long iip);
+
#define MASK_41 ((unsigned long)0x1ffffffffff)
#endif /* _XEN_IA64_BUNDLE_H */